package src.main.java.modules.container;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import src.main.java.Constantes;
import src.main.java.entity.EstoqueTO;
import src.main.java.entity.ProdutoTO;
import br.org.prodUnicamp.services.ServicosPortTypeProxy;
import br.org.prodUnicamp.services.xsd.Categoria;
import br.org.prodUnicamp.services.xsd.Fabricante;
import br.org.prodUnicamp.services.xsd.Produto;

public class DescricaoDeProdutosCaller {
	
//	private static final String BASE_URL = "http://staff01.lab.ic.unicamp.br:8080/ProdUNICAMPServices/services/Servicos";
	private static final String BASE_URL = "http://localhost:8082/ProdUNICAMPServices/services/Servicos";
			
	
	public static List<ProdutoTO> buscaProdutosByFilter(String nome, String categoria, String fabricante){
		List<ProdutoTO> retorno = new ArrayList<ProdutoTO>();
		
		if (Constantes.MODO_CONECTADO_DO_IC){
			ServicosPortTypeProxy proxy = new ServicosPortTypeProxy();
			proxy.setEndpoint(BASE_URL);
			try {
				Produto[] produtoServ = proxy.getListProdutoByFilter(nome, categoria, fabricante, null, null);
				if(produtoServ != null){
					for(Produto p : produtoServ){
						ProdutoTO pTO = new ProdutoTO();
						pTO.setCodigo(p.getCodigo());
						pTO.setNome(p.getNome());
						pTO.setQuantidade(1);
						pTO.setUrlImage(p.getImagem());
						pTO.setValor(-1.0);
						pTO.setPeso(p.getPeso());
						if (p.getAltura() != null && p.getComprimento() != null)
							pTO.setVolume(p.getAltura().intValue() * p.getComprimento().intValue());
						retorno.add(pTO);
					}
				}
			} catch (RemoteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			ProdutoTO p1 = new ProdutoTO();
			p1.setCodigo(1L);
			p1.setNome("Primeiro Produto");
			p1.setValor(32.0);
			p1.setUrlImage("http://profile.ak.fbcdn.net/hprofile-ak-ash3/48977_679052876_422_n.jpg");
			ProdutoTO p2 = new ProdutoTO();
			p2.setCodigo(1L);
			p2.setNome("Segundo Produto");
			p2.setValor(32.0);
			p2.setUrlImage("http://profile.ak.fbcdn.net/hprofile-ak-ash3/48977_679052876_422_n.jpg");
			ProdutoTO p3 = new ProdutoTO();
			p3.setCodigo(1L);
			p3.setNome("Terceiro Produto");
			p3.setValor(32.0);
			p3.setUrlImage("http://profile.ak.fbcdn.net/hprofile-ak-ash3/48977_679052876_422_n.jpg");
			ProdutoTO p4 = new ProdutoTO();
			p4.setCodigo(1L);
			p4.setNome("Quarto Produto");
			p4.setValor(32.0);
			p4.setUrlImage("http://profile.ak.fbcdn.net/hprofile-ak-ash3/48977_679052876_422_n.jpg");
			ProdutoTO p5 = new ProdutoTO();
			p5.setCodigo(1L);
			p5.setNome("Quinto Produto");
			p5.setValor(32.0);
			p5.setUrlImage("http://profile.ak.fbcdn.net/hprofile-ak-ash3/48977_679052876_422_n.jpg");
			ProdutoTO p6 = new ProdutoTO();
			p6.setCodigo(1L);
			p6.setNome("Sexto Produto");
			p6.setValor(32.0);
			p6.setUrlImage("http://profile.ak.fbcdn.net/hprofile-ak-ash3/48977_679052876_422_n.jpg");
			ProdutoTO p7 = new ProdutoTO();
			p7.setCodigo(2L);
			p7.setNome("Setimo Produto");
			p7.setValor(32.0);
			p7.setUrlImage("http://profile.ak.fbcdn.net/hprofile-ak-ash4/368875_672141241_1910619978_n.jpg");
			retorno.add(p1);
			retorno.add(p2);
			retorno.add(p3);
			retorno.add(p4);
			retorno.add(p5);
			retorno.add(p6);
			retorno.add(p7);
		}
		
		
		return retorno;
	}
	
	public static List<String> getCategoriesNames(){
		List<String> categories = new ArrayList<String>();
		
		if (Constantes.MODO_CONECTADO_DO_IC){
			ServicosPortTypeProxy proxy = new ServicosPortTypeProxy();
			proxy.setEndpoint(BASE_URL);
			try{
				Categoria[] categorias =  proxy.getListCategoria();
				for(Categoria cat : categorias){
					categories.add(cat.getNome());
				}
			}catch(RemoteException e){
				
			}
		} else {
			categories.add("Computadores");
			categories.add("Eletrodomesticos");
		}

		return categories;
	}
	
	public static List<String> getVendorsNames(){
		List<String> vendors = new ArrayList<String>();
		
		if(Constantes.MODO_CONECTADO_DO_IC){
			ServicosPortTypeProxy proxy = new ServicosPortTypeProxy();
			proxy.setEndpoint(BASE_URL);
			try{
				Fabricante[] fabricantes = proxy.getListFabricante();
				for(Fabricante f : fabricantes){
					vendors.add(f.getNome());
				}
			}catch(RemoteException e){
				
			}
		} else {
			vendors.add("Asus");
			vendors.add("Samsung");
		}
		
		return vendors;
	}
	
	public static ProdutoTO getProdutoByCodigo(Long codigo){
		ProdutoTO retorno = null;
		ServicosPortTypeProxy proxy = new ServicosPortTypeProxy();
		proxy.setEndpoint(BASE_URL);
		try{
			Produto p = proxy.getProdutoByCodigo(codigo);
			retorno = new ProdutoTO();
			retorno.setCodigo(p.getCodigo());
			retorno.setNome(p.getNome());
			retorno.setQuantidade(1);
			retorno.setUrlImage(p.getImagem());
			retorno.setValor(-1.0);
			retorno.setPeso(p.getPeso());
			if (p.getAltura() != null && p.getComprimento() != null){
				retorno.setVolume(p.getAltura().intValue() * p.getComprimento().intValue());
			}
			EstoqueTO estoque = EstoqueCaller.buscaEstoqueProduto(p.getCodigo());
			if(estoque != null && estoque.getProduct() != null){
				retorno.setQuantidade(estoque.getProduct().getQuantity());
				retorno.setValor(estoque.getProduct().getPrice());
			}
		}catch(RemoteException e){
				
		}
		return retorno;
	}

}
